0804. 唯一摩尔斯密码词【简单】
1. 📝 题目描述
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串,比如:
'a'对应".-",'b'对应"-...",'c'对应"-.-.",以此类推。
为了方便,所有 26 个英文字母的摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给你一个字符串数组 words,每个单词可以写成每个字母对应摩尔斯密码的组合。
- 例如,
"cab"可以写成"-.-..--...",(即"-.-."+".-"+"-..."字符串的结合)。我们将这样一个连接过程称作 单词翻译。
对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。
示例 1:
txt
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
示例 2:
txt
输入:words = ["a"]
输出:11
2
2
提示:
1 <= words.length <= 1001 <= words[i].length <= 12words[i]由小写英文字母组成
2. 🎯 s.1 - 暴力解法
js
/**
* @param {string[]} words
* @return {number}
*/
var uniqueMorseRepresentations = function (words) {
// 摩尔斯密码表,按字母顺序排列 a-z
const morseCodes = [
'.-',
'-...',
'-.-.',
'-..',
'.',
'..-.',
'--.',
'....',
'..',
'.---',
'-.-',
'.-..',
'--',
'-.',
'---',
'.--.',
'--.-',
'.-.',
'...',
'-',
'..-',
'...-',
'.--',
'-..-',
'-.--',
'--..',
]
// 使用 Set 存储不同的摩尔斯密码
const transformations = new Set()
for (const word of words) {
let morse = ''
// 将单词转换为摩尔斯密码
for (const char of word) {
// 计算字符相对于 'a' 的偏移量作为索引。
// 提示信息中表明所有字母都是小写,因此这里无需考虑大小写问题。
const index = char.charCodeAt(0) - 'a'.charCodeAt(0)
morse += morseCodes[index]
}
// 将转换后的摩尔斯密码加入集合
transformations.add(morse)
}
// 返回不同摩尔斯密码的数量
return transformations.size
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54